package com.chenhs.oop.study.集合;

/**
 * @program: JAVA300
 * @description: 自己实现HashMap
 * @author: peanut
 * @create: 2019-02-28 23:11
 */
public class 自己实现HashMap {
    //键值对的总数。
    com.chenhs.oop.study.集合.Node2[] table;
    //键值对的总数。
    int size;

    //构造方法用
    public 自己实现HashMap() {
        table = new com.chenhs.oop.study.集合.Node2[16];
    }

    /* 重写hashCode方法*/
    private int myHashCode(int v, int length) {
        return v & length;
    }

    /* 存入数据的方法*/
    public void put(Object key, Object value) {
        /* 最后一个节点*/
        com.chenhs.oop.study.集合.Node2 lastNode = null;
        com.chenhs.oop.study.集合.Node2 node2 = new com.chenhs.oop.study.集合.Node2();
        node2.hash = myHashCode(key.hashCode(), table.length);
        node2.key = key;
        node2.value = value;
        node2.next = null;
        com.chenhs.oop.study.集合.Node2 temp = table[node2.hash];
        if (temp == null) {
            //当当前数组第一次插入数据时，
            table[node2.hash] = table[node2.hash];
        } else {
            //当当前数组非第一次插入数据时，
            /* 找出最后一个节点*/
            while (temp != null) {
                /* 键相等时，*/
                if (temp.key.equals(node2.key)) {
                    temp.value = node2.value;
                    break;
                } else {
                    lastNode = temp;
                    temp = temp.next;
                }
            }
            lastNode.next = node2;

        }
        size++;

    }

    @Override
    public String toString() {
        StringBuffer sb = new StringBuffer();
        sb.append("【");
        for (int i = 0; i < table.length; i++) {
            /* 存储在数组中的单链表*/
            com.chenhs.oop.study.集合.Node2 node = table[i];
            while (node != null) {
                sb.append("key:").append(node.key).append("--value:").append(node.value).append(",");
                node = node.next;
            }
        }
		return sb.replace(sb.length() - 1, sb.length(), "】").toString();
    }
}
